package org.wangchaocheng.cloudgallery.user.gateway;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.wangchaocheng.cloudgallery.dto.common.PageDTO;
import org.wangchaocheng.cloudgallery.dto.user.UserDTO;
import org.wangchaocheng.cloudgallery.query.user.UserPageQry;

/**
 * @author wangchaocheng
 * @date 2025-03-01 10:30:19
 */
public interface UserGateway {

    /**
     * 创建用户
     *
     * @param userDTO 用户
     */
    void create(UserDTO userDTO);

    /**
     * 修改用户
     *
     * @param userDTO 用户
     */
    void modify(UserDTO userDTO);

    /**
     * 根据指定列列查询用户
     * @param column 列
     * @param value 值
     *
     * @return {@link UserDTO}
     * @param <T> 值类型
     */
    <T> UserDTO findByColumn(SFunction<UserDTO, ?> column, T value);

    /**
     * 根据指定列查询用户是否存在
     * @param column 列
     * @param value 值
     * @return {@link Boolean}
     * @param <T> 值类型
     */
    <T> Boolean existByColumn(SFunction<UserDTO, ?> column, T value);

    /**
     * 分页查询用户
     * @param qry 查询条件
     * @return {@link Page}<{@link UserDTO}>
     */
    PageDTO<UserDTO> listPage(UserPageQry qry);


}
